MACHINE LEARNING - BOOTSTRAPPING, BAGGING, BOOSTING E RANDOM FORESTS.
Autor
João Ricardo F. de Lima
Data de Publicação
15 de abril de 2024
Bootstrapping, Bagging, Boosting e Random Forests.
1Alguns modelos preditivos costumam apresentar alta variância, outros alto viés. Nenhum destes extremos é desejável se o objetivo é maximizar a acurácia do modelo. Felizmente, ainda podemos utilizar modelos assim para tarefas preditivas, se conciliarmos com técnicas adicionais adequadas.
Aqui é mostrada as técnicas de Bootstrapping, Bagging, Boosting e Random Forests com o objetivo de aumentar o desempenho em modelos preditivos.
Bootstrapping
Bootstrapping é uma técnica estatística que permite gerar quase qualquer estatística ou estimador de interesse ao empregar a amostragem aleatória com reposição em dados observados.
A ideia desta técnica é simular múltiplos conjuntos de dados similares aos dados observados ao extrair amostras do mesmo. Cada conjunto de dados é criado ao selecionar aleatoriamente observações dos dados observados originais, com a possibilidade de que a mesma observação seja selecionada várias vezes ou nunca seja selecionada.
# Pacoteslibrary(rbcb)library(dplyr)library(tsibble)library(fabletools)library(fable)set.seed(1984)# Dadosdados <- rbcb::get_series(code =c("ipca"=433),start_date ="2010-01-01",end_date ="2024-01-01" ) |> dplyr::mutate(date = tsibble::yearmonth(date)) |> tsibble::as_tsibble(index = date)# Modelomodelo <- dados |> fabletools::model(stl = fable::AR(ipca))# Amostras de bootstrappingbootstrapping <- modelo |> fabletools::generate(new_data = dados, times =10, bootstrap_block_size =8#seleciona em blocos de 8 obs, reduz questao da autocorrelaçao da serie temporal. ) |> dplyr::select(-c(".model", "ipca"))bootstrapping
# Série originalg1 <- dados |> fabletools::autoplot(.vars = ipca, size =1) + ggplot2::labs(title ="1) Série original", y =NULL, x =NULL)# Séries simuladas de bootstrapg2 <- bootstrapping |> fabletools::autoplot(.vars = .sim) + fabletools::autolayer(object = dados, .vars = ipca, size =1) + ggplot2::guides(colour ="none") + ggplot2::labs(title ="2) Séries Bootstrap", y =NULL, x =NULL)# Previsões de bootstrapg3 <- previsao |> tsibble::update_tsibble(key = .rep) |> fabletools::autoplot(.vars = .mean) + fabletools::autolayer(object = dados, .vars = ipca, size =1) + ggplot2::guides(colour ="none") + ggplot2::labs(title ="3) Previsões Bootstrap", y =NULL, x =NULL)# Gráficolibrary(patchwork)g1 + g2 + g3 + patchwork::plot_layout(nrow =3) + patchwork::plot_annotation(title ="A técnica de Bootstrapping",caption ="**Elaboração**: analisemacro.com.br <br>**Dados**: IPCA/IBGE",theme = ggplot2::theme(plot.title = ggplot2::element_text(face ="bold", size =22, hjust =0.5),plot.caption = ggtext::element_textbox_simple() ) )
As principais vantagens da técnica de bootstrapping são:
Simplicidade de uso e implementação;
Pode ser usada para obter quase qualquer estatística ou estimador;
É mais acurada para obter intervalos de confiança do que o uso da variância amostral ou suposições de normalidade.
Bagging
Nesse sentido, a técnica de Bootstrap aggregation ou simplesmente Bagging é um procedimento de propósito geral que possibilita justamente a redução de variância de diferentes métodos de aprendizado.
Aqui o método é introduzido no contexto de arvores de decisão, mas o mesmo pode ser utilizado em diferentes métodos de aprendizado.
Dado um conjunto de \(n\) observações independentes, \(Z_1, ..., Z_n\), cada uma com variância \(\sigma^2\), a variância da média \(\bar{Z}\) será dada por \(\frac{\sigma^2}{n}\).
Ou seja, calcular a média do conjunto de observações reduz a variância.
É imediato pensar que para reduzir a variância e, portanto, aumentar a acurácia da previsão de um determinado método estatístico de aprendizado basta pegar muitos conjuntos de treinamento da população, construir um modelo de previsão separado usando cada conjunto, definir e calcular a média das previsões resultantes.
Em outras palavras, calcula-se \(\hat{f}^{1}(x), \hat{f}^{2}(x), ..., \hat{f}^{B}(x)\) usando \(B\) conjuntos de treino, calcula-se a média deles de modo a obter um único modelo com baixa variância, dado por:
Isso não é muito prático já que, em geral, não se tem acesso a muitos conjuntos de treino. Assim, o quese pode fazer é aplicar a técnica de bootstrap, de modo a tomar diversas amostras do mesmo conjunto de treino. Assim, são gerados \(B\) diferentes conjuntos de treino. A partir daí, pode-se treinar o método no \(b\) conjunto de treino, de modo a obter \(\hat{f}^{*b} (x)\), finalmente obtendo a média das previsões
Enquanto o método de bagging pode ser utilizado para aumentar a acurácia da previsão nos métodos de regressão, ele é particularmente útil para árvores de decisão.
Para aplicar o método à árvores de regressão, simplesmente se constrói \(B\) árvores de regressão usando \(B\) conjuntos de treino construídos através da aplicação de bagging.
Como as árvores individuais não são podadas, elas crescem bastante, tendo assim alta variância e baixo viés.
Assim, construir a média dessas árvores irá reduzir a variância.
Até aqui, o método de bagging é descrito no contexto de uma regressão, com um variável \(Y\) quantitativa. Pode-se estender o método para problemas de classificação através de diversas abordagem.
A mais simples é pensar que para um dado conjunto de teste, pode-se registrar a classe prevista por cada uma das \(B\) árvores e toma-se uma votação majoritária: a previsão que mais ocorre entre as \(B\) previsões.
Um exemplo detalhado e bem interessante da aplicação do método de bagging é mostrado abaixo.